package builderdto

import (
	"yunj/pkg/yunj/core/response"
)

// 表单切换栏
type FormTab struct {
	Code  string `json:"code"`
	Title string `json:"title"`
}

// Submit操作返回结果
type FormSubmitResult struct {
	Reload           bool               `json:"reload"` // 是否重新加载列表数据
	Message          string             `json:"-"`      // 提示消息
	ResponseJsonData *response.JsonData `json:"-"`
}

// 将map[string]any转换为SubmitResult
func (res *FormSubmitResult) MapTo(data map[string]any) {
	if reloadRaw, exists := data["reload"]; exists {
		if reload, ok := reloadRaw.(bool); ok {
			res.Reload = reload
		}
	}
	if responseJsonDataRaw, exists := data["responseJsonData"]; exists {
		if responseJsonData, ok := responseJsonDataRaw.(*response.JsonData); ok && responseJsonData != nil {
			res.ResponseJsonData = responseJsonData
		}
	}
}

// 日期时间快捷选项
type FormDateShortcut struct {
	Text  string `json:"text"`  // 快捷选项文本
	Value string `json:"value"` // 快捷选项值
}

// 表头
type FormTableCol struct {
	Title    string `json:"title"`    // 标题
	Field    string `json:"field"`    // 字段
	Width    uint   `json:"width"`    // 宽度
	Verify   string `json:"verify"`   // 验证规则
	Readonly bool   `json:"readonly"` // 是否只读
}

// 树选择节点
type FormTreeCheckNode struct {
	Id       any    `json:"id"`
	Pid      any    `json:"pid"`
	Name     string `json:"name"`      // 节点展示名称
	FullName string `json:"full_name"` // 节点展示的title名称
	Readonly bool   `json:"readonly"`  // 是否只读
	HasSub   bool   `json:"hasSub"`    // 是否有子节点
	Nocheck  bool   `json:"nocheck"`   // 是否不可选
	Checked  bool   `json:"checked"`   // 是否选中
}

// 树编辑节点
type FormTreeEditNode struct {
	Id          any    `json:"id"`
	Pid         any    `json:"pid"`
	Name        string `json:"name"`        // 节点展示名称
	Readonly    bool   `json:"readonly"`    // 是否只读
	DisableSort bool   `json:"disableSort"` // 是否禁止排序
}
